package es.deusto.ingenieria.is.Hanoi.formulation;
import java.util.ArrayList;
import java.util.Stack;




public class Soporte implements Cloneable {

	private int posicion;
	private int nDiscos;
	private Stack<Disco> lDiscos;
	
	public Soporte (int posicion, int nDiscos, Stack pila) {
		this.posicion = posicion;
		this.nDiscos = nDiscos;
		this.lDiscos = pila;
	}
	
	public void addDisco () {
		this.nDiscos=nDiscos+1;
	}
	
	public int getDiscos () {
		return nDiscos;
	}
	
	public int getPosicion () {
		return posicion;
	}
	
	
	public Stack<Disco> getlDiscos() {
		return lDiscos;
	}

	public void setlDiscos(Stack<Disco> lDiscos) {
		this.lDiscos = lDiscos;
	}
	
	

	public int getnDiscos() {
		return nDiscos;
	}

	public void setnDiscos(int nDiscos) {
		this.nDiscos = nDiscos;
	}

	public void setPosicion(int posicion) {
		this.posicion = posicion;
	}

	public boolean equals (Object obj) {
		boolean solution = true;
		if (obj != null && obj instanceof Soporte
				&& ((Soporte) obj).getDiscos() == this.getDiscos() 
				&& ((Soporte) obj).getPosicion() == this.getPosicion()) {
			Soporte soporteAux1=((Soporte)obj).clone();
			Soporte soporteAux2=this.clone();
			Stack<Disco> pilaObj = soporteAux1.getlDiscos();
			Stack<Disco> pila2 = soporteAux2.getlDiscos();
			while (!pilaObj.isEmpty()&& solution){
				if(pilaObj.pop().getTamanyo()!=pila2.pop().getTamanyo()) {
					solution=false;
				}
			}
		} else {
			solution= false;
		}
		return solution;
	}
	
	public void aString() {
		for(int i=0;i<this.getlDiscos().size();i++){
			System.out.println("Disco "+(i+1)+": "+this.getlDiscos().pop().getTamanyo());
		}
	}
	
	public Soporte clone() {
		Soporte clon = null;
		
		try {
			clon = (Soporte) super.clone();
			Stack <Disco> pilaClon = new Stack<Disco>();
			Stack <Disco> pila2 = new Stack<Disco>();
			Stack <Disco> pilaAux = new Stack<Disco>();
			while (!this.lDiscos.empty()) {
				Disco d=this.lDiscos.pop();
				pilaAux.push(d);
			}
			while (!pilaAux.empty()) {
				Disco d=pilaAux.pop();
				pila2.push(d);
				pilaClon.push(d);
			}
			this.setlDiscos(pila2);
			clon.setlDiscos(pilaClon);
		} catch (CloneNotSupportedException e) {
			System.err.println("% [ERROR] Soporte.clone(): " + e.getMessage());
		}
		
		return clon;
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Disco d1=new Disco(10);
		Disco d2=new Disco(7);
		Disco d3=new Disco(5);
		Stack<Disco> pila=new Stack<Disco>();
		pila.push(d1);
		pila.push(d2);
		pila.push(d3);
		Soporte s=new Soporte(0, 3, pila);
		Soporte s2=s.clone();
		Stack<Disco> pila1=s.getlDiscos();
		System.out.println("Disco 1: "+pila1.pop().getTamanyo());
		System.out.println("Disco 2: "+pila1.pop().getTamanyo());
		System.out.println("Disco 3: "+pila1.pop().getTamanyo());
		
		Stack<Disco> pila2=s2.getlDiscos();
		if(!pila2.isEmpty()){
		System.out.println("Disco 1: "+pila2.pop().getTamanyo());
		System.out.println("Disco 2: "+pila2.pop().getTamanyo());
		System.out.println("Disco 3: "+pila2.pop().getTamanyo());
		}
	}

}
